自動タグ付けソリューション(resource-autotagger)を利用してリソースへのタグ付与や管理を楽にしよう
タグ(ラベル)は、クラウドリソースを管理する上で重要な機能の一つです。その管理は悩ましい課題でもあります。
タグ管理の一つに、作成されたリソースへのタグ付与状況の確認と是正があります。
確認方法の代表的なものとしては AWS Config rules と AWS Security Hub によるチェックがあります。
また一括で付与や修正をする場合は Tag Editor や AWS Resource Explorer があります。
タグ導入時や棚卸しのようなユースケースでは上記の Tag Editor などを利用した方法が適切ですが、日常的なチェック運用はできるだけ手動でケアする量は少なく、かつ早期に対応したいところです。
そんな時に利用できそうなのが、resource-autotagger になります。
定期的に指定したタグが存在しないリソースをチェックして、該当するリソースに検索条件にしたタグを付与することが出来ます。
詳細なソリューションの情報は、下記ブログをご確認ください。
今回、検索するタグと付与するタグを分けるなど、もう少し自由に実行可能かを試していきます。
例えば cost-center=1111 の付与状況を確認するとした場合
resource-autotagger - デフォルトでは
- 検索条件:
- cost-center=1111 が存在しない リソース(今回は EC2 インスタンスのみ)
- 付与タグ:
- cost-center=1111 を付与
今回やってみるのは
- 検索条件:
- system=ec かつ env=prod で cost-center タグ が存在しないリソース(同上)
- 付与タグ:
- cost-center=1111 と role=web を付与
準備
EC2 を5台用意して下記のようにタグ付与しておきます。
no | Name | system | role | env | cost-center |
---|---|---|---|---|---|
1 | prod-web01 | ec | web | prod | 1111 |
2 | prod-web02 | ec | prod | ||
3 | prod-web03 | ec | web | prod | 2222 |
4 | stg-web | ec | web | stg | |
5 | prod-db | analytics | db | prod |
今回は no2 のみを検知し、追加することを目的とします。
resource-autotagger デプロイ
CDK を利用してデプロイをしていきます。手順は下記をご確認ください。
コード変更
デプロイに成功すると 「ResourceAutoTagCdkStack-resourceautotag XXXXXX」という Lambda 関数が作成されます。
その中の index.mjs を3箇所変更します。
- 条件や付与するタグを変更
この部分はデフォルトのユースケースで利用する場合も修正する必要があります。(そのままだと blogResourceAutoTagEnhanced で検索されます)
const TAG_KEY = 'blog';
const TAG_VALUE = 'ResourceAutoTagEnhanced';
const DURATION_IN_MINUTES = 14400;
↓↓↓
const TAG_KEY = 'env';
const TAG_VALUE = 'prod';
const DURATION_IN_MINUTES = 14400;
const ADD_TAG_KEY1 = 'system';
const ADD_TAG_VALUE1 = 'ec';
const ADD_TAG_KEY2 = 'cost-center';
const ADD_TAG_VALUE2 = '1111';
const ADD_TAG_KEY3 = 'role';
const ADD_TAG_VALUE3 = 'web';
- 検索条件を変更
既存タグ付けされたリソースの検索は AWS Resource Explorer で実行するため、他の条件を追加する場合にはこちらが参考になります。
あとマネジメントコンソール上で AWS Resource Explorer から検索条件を指定して意図した内容であることを確認した後に「クエリをコピー」から取得したクエリを参考すると便利です。
var params = {
QueryString: `resourcetype:${resourceType} -tag.${TAG_KEY}=${TAG_VALUE} region:${region}`,
MaxResults: Number('1000')
};
↓↓↓
var params = {
QueryString: `resourcetype:${resourceType} tag:${TAG_KEY}=${TAG_VALUE} tag:${ADD_TAG_KEY1}=${ADD_TAG_VALUE1} -tag.key:${ADD_TAG_KEY2} region:${region}`,
MaxResults: Number('1000')
};
- 付与するタグを変更
resource_tags.push({"Key": TAG_KEY, "Value": TAG_VALUE});
return resource_tags;
↓↓↓
resource_tags.push({"Key": ADD_TAG_KEY2, "Value": ADD_TAG_VALUE2},{"Key": ADD_TAG_KEY3, "Value": ADD_TAG_VALUE3});
return resource_tags;
実行
デフォルトでは 30分ごとに Amazon EventBridge スケジューラで実行されます。サイクルを変更したい場合は、Amazon EventBridge の設定を変更します。
しばらく待つと...
意図したタグが追加されました。(no2 だけ更新されて、他はそのまま)
さいごに
自動タグ付けソリューションである resource-autotagger をデフォルト以外のユースケースで利用可能かを確認しました。コードを変更することで、他の未付与なリソースや適切な内容への修正といった今回以外のユースケースにも対応が可能そうでした。
今回のようなソリューションを利用して毎日1回自動でのチェックを実行して、月1回 Resource Explorer でチェックと修正を実施すると品質を担保しながらも効率化することも出来るのではないでしょうか。